/*----------------------------------------------------------------------------------------
*
*  Copyright 2019, Gao Hai Hui, <fromzeropoint@126.com>.  All rights reserved.
*  https://gitee.com/helloworldghh/xos_cat.git
*  Use of this source code is governed by a MIT license
*  that can be found in the License file.
*
----------------------------------------------------------------------------------------*/
#include "../import/head.h"
#include "../data_struct/head.h"
#include "../helper_objs/head.h"
#include "../macro/head.h"
#include "../impl/head.h"
#include "../msg/head.h"
#include "notify_main.h"

namespace xos_cat
{

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 

    notify_main::notify_main()
    {
    }

    notify_main::~notify_main()
    {
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    // 
    // proc
    // 
    int notify_main::proc( xos_box::i_msg*& pMsg )
    {
        int ret = 1;

        int nMsg = pMsg->get_msg();

        switch( nMsg )
        {
            // 
            // start
            // 
            case net::NET_START_FAILED:
            {
                start_failed(pMsg);
            }
            break;
            case net::NET_STARTTING:
            {
                startting(pMsg);
            }
            break;

            // 
            // running
            // 
            case net::NET_RUNNING:
            {
                running(pMsg);
            }
            break;

            // 
            // stop
            // 
            case net::NET_STOPPING:
            {
                stopping(pMsg);
            }
            break;
            case net::NET_STOPPED:
            {
                stopped(pMsg);
            }
            break;

            // 
            // quit
            // 
            case net::NET_QUIT:
            {
                quit( pMsg );
            }
            break;

            default:
            {
                ret = 0;
            }
            break;
        }

        return ret;
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 

    int notify_main::start_failed( xos_box::i_msg*& pMsg )
    {
        int ret = 0;
        net::i_module* pModule = (net::i_module*)pMsg->get_void( 0, 0 );
        module* pM = (module*)pModule->get_user_data();
        LOG4( "module %s start_failed", pM->m_name.c_str() );
        return ret;
    }

    int notify_main::startting( xos_box::i_msg*& pMsg )
    {
        int ret = 0;
        net::i_module* pModule = (net::i_module*)pMsg->get_void( 0, 0 );
        module* pM = (module*)pModule->get_user_data();
        LOG4( "module %s startting", pM->m_name.c_str() );
        return ret;
    }

    int notify_main::running( xos_box::i_msg*& pMsg )
    {
        int ret = 0;
        net::i_module* pModule = (net::i_module*)pMsg->get_void( 0, 0 );
        module* pM = (module*)pModule->get_user_data();
        LOG4( "module %s running", pM->m_name.c_str() );
        helper_module::get()->all_done_test( 1 );
        return ret;
    }

    int notify_main::stopping( xos_box::i_msg*& pMsg )
    {
        int ret = 0;
        LOG4( "module %s stopping", "xos_net" );
        return ret;
    }

    int notify_main::stopped( xos_box::i_msg*& pMsg )
    {
        int ret = 0;
        LOG4( "module %s stopped", "xos_net" );
        helper_main::get()->notify( pMsg, MAIN_NET_STOPPED );
        return ret;
    }

    int notify_main::quit( xos_box::i_msg*& pMsg )
    {
        int ret = 0;
        helper_main::get()->notify( pMsg, MAIN_QUITTING );
        return ret;
    }

} // xos_cat
